package parteSemantica;

import java.util.LinkedList;

import parteLexica.Lexema;
import parteLexica.TabelaDeTokens.Token;
import parteSintatica.TabelaDeSimbolos;

public class AnalisadorSemanticoConcreto implements AnalisadorSemantico {
	private LinkedList<Lexema> listaLexemas;
	private TabelaDeSimbolos tabelaDeSimbolos;
	private AvaliadorExpressao avaliadorExpressao;
	
	public AnalisadorSemanticoConcreto () {
	}
	
	public AnalisadorSemanticoConcreto (LinkedList<Lexema> listaLexemas) {
		this.listaLexemas = listaLexemas;

	}
	
	public void analiseSemantica (){
		for (int i = 0; i < this.listaLexemas.size();i++) {
			if (listaLexemas.get(i).getToken() == Token.ATRIBUICAO) {
				Lexema lexema = getIdentificadorLeft(i);
				LinkedList<Lexema> expressao = getExpressao(i);				
			}
		}
	}
	
	private Lexema getIdentificadorLeft (int i) {
		int point = i;
		while (listaLexemas.get(point).getToken() != Token.ATRIBUICAO) {
			point--;
		}
		return listaLexemas.get(point);
	}
	
	private LinkedList<Lexema> getExpressao (int index) {
		LinkedList<Lexema> expressao = new LinkedList<Lexema>();
		int ehEnd = 0;
		for (int i = index; i < this.listaLexemas.size();i++) {
			if ((listaLexemas.get(i).getToken() != Token.PONTO_E_VIRGULA_DUPLO) || (ehEnd != 0)) {
				if (listaLexemas.get(i).getToken() == Token.ATRIBUICAO) {
					ehEnd++;
				} 
				if (listaLexemas.get(i).getToken() == Token.PONTO_E_VIRGULA_DUPLO){
					ehEnd--;
				}
				expressao.add(listaLexemas.get(i));
			}
		}
		return expressao;		
	}	
}
